package com.lgz.lgzapiinterface.controller;

import com.lgz.lgzapiinterface.model.User;
import com.lgz.lgzapiinterface.utils.SignUtils;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;

/**
 * 名称 API
 *
 * @author lgz
 */
@RestController
@RequestMapping("/name")
public class NameController {

    @GetMapping("/get")
    public String getNameByGet(String name) {
        return "GET 你的名字是" + name;
    }

    @PostMapping("/post")
    public String getNameByPost(@RequestParam String name) {
        return "POST 你的名字是" + name;
    }

    @PostMapping("/user")
    public String getUsernameByPost(@RequestBody User user, HttpServletRequest request) {
        String accessKey = request.getHeader("accessKey");               //获取请求头中的accessKey             访问密钥
        String nonce = request.getHeader("nonce");                       //获取请求头中的nonce                 随机数
        String timestamp = request.getHeader("timestamp");               //获取请求头中的timestamp             时间戳
        String sign = request.getHeader("sign");                         //获取请求头中的sign                  签名
        String body = request.getHeader("body");                         //获取请求头中的body                  请求体
        // todo 实际情况应该是去数据库中查是否已分配给用户

        if (!accessKey.equals("lgz")) {
            throw new RuntimeException("无权限");
        }

        if (Long.parseLong(nonce)>10000){
            throw new RuntimeException("无权限");
        }

        // todo 验证时间戳时间和当前时间应该不能超过五分钟

        long currentTimestamp = System.currentTimeMillis();                       // 获取当前时间的时间戳
        long requestTimestamp = Long.parseLong(timestamp);                        // 将请求头中的时间戳转换为long类型
        // 验证时间戳和当前时间是否在五分钟以内
        if (!(Math.abs(currentTimestamp - requestTimestamp) > (5 * 60 * 1000))) {
            // 时间戳和当前时间在五分钟以内，继续处理请求,否则则抛出异常
            throw new RuntimeException("时间戳和当前时间超过五分钟");
        }

        // todo 验证签名是否正确 实际情况是从数据库中查出secretKey
        String serverSign = SignUtils.getSige(body, "qwertyuiop");
        if (!sign.equals(serverSign)) {
            throw new RuntimeException("无权限");
        }
        return "POST 你的名字是" + user.getUsername();
    }
}


























